package cn.ike.web.controller.company;

import cn.ike.domain.company.Company;
import cn.ike.service.company.CompanyService;
import com.alibaba.dubbo.config.annotation.Reference;
import com.github.pagehelper.PageInfo;
import lombok.extern.log4j.Log4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

@Controller
@Log4j
@RequestMapping("/company")
public class CompanyController {

    // 注入service Dubbo服务类
    @Reference
    private CompanyService companyService;

    /**
     * 1.分页查询企业列表
     * 请求路径：http://localhost:8080/company/list
     * 响应路径：/WEB-INF/pages/company/company-list.jsp
     */
    @RequestMapping("/list")
    public ModelAndView list(
            @RequestParam(defaultValue = "1") Integer pageNum,
             @RequestParam(defaultValue = "5") Integer pageSize) {
        ModelAndView model = new ModelAndView();
        try {
            log.info("执行企业列表查询的开始...");
            model = new ModelAndView();
            PageInfo<Company> pageInfo = companyService.findByPage(pageNum, pageSize);
            model.addObject("pageInfo", pageInfo);
            model.setViewName("company/company-list");
            log.info("执行企业列表查询的结束...");
        } catch (Exception e) {
            e.printStackTrace();
            log.error("执行企业列表查询出现异常！", e);
        }
        return model;
    }

    /**
     * 2. 进入添加页面
     * 请求地址：http://localhost:8080/company/toAdd
     * 响应地址：/WEB-INF/pages/company/company-add.jsp
     */
    @RequestMapping("/toAdd")
    public String toAdd() {
        return "company/company-add";
    }

    /**
     * 3.添加和修改企业
     * 请求地址：http://localhost:8080/company/edit
     * 响应地址：/WEB-INF/pages/company/company-list.jsp
     */
    @RequestMapping("/edit")
    public ModelAndView edit(Company company) {
        ModelAndView model = new ModelAndView();
        try {
            // 1.如果请求参数中没有传入id，那就是添加操作
            if (StringUtils.isEmpty(company.getId())){
                log.info("执行添加企业的开始...");
                companyService.save(company);
                log.info("执行添加企业的结束...");
                // 2.如果请求参数中有传入id，那就是修改操作
            }else {
                log.info("执行修改企业信息的开始...");
                companyService.update(company);
                log.info("执行修改企业信息的结束...");
            }
            model.setViewName("redirect:/company/list");
        } catch (Exception e) {
            e.printStackTrace();
            log.error("执行添加或修改企业出现异常！", e);
        }
        return model;
    }

    /**
     * 4.进入修改页面
     */
    @RequestMapping("/toUpdate")
    public ModelAndView toUpdate(String id) {
        ModelAndView model = new ModelAndView();
        try {
            log.info("执行企业信息的回显开始...");
            // 调用业务层根据id查询企业信息
            Company company = companyService.findById(id);
            model.addObject("company", company);
            model.setViewName("company/company-update");
            log.info("执行企业信息的回显结束...");
        } catch (Exception e) {
            e.printStackTrace();
            log.error("执行企业信息的回显出现异常！", e);
        }
        return model;
    }

    /**
     * 5. 删除企业
     */
    @RequestMapping("/delete")
    public ModelAndView toDelete(String id) {
        ModelAndView model = new ModelAndView();
        try {
            log.info("执行删除企业的开始...");
            // 调用业务层方法
            companyService.delete(id);
            // 重定向到企业列表页面
            model.setViewName("redirect:/company/list");
            log.info("执行删除企业的结束...");
        } catch (Exception e) {
            e.printStackTrace();
            log.error("执行删除企业出现异常！", e);
        }
        return model;
    }

}
